package immutablecollections.functions;

class Function2Impl<O> implements Function2<O>
{
    final private Invoker<O> invoker;

    public Function2Impl(Invoker<O> invoker)
    {
        this.invoker = invoker;
    }

    @Override
    public Function1<O> invoke(Object arg1)
    {
        return new Function1Impl<O>(arg1, invoker);
    }

    @Override
    public Function2<O> flip()
    {
        return new Function2Impl<O>(new FlipInvoker<O>(invoker));
    }

    @Override
    public String toString()
    {
        return invoker.toString();
    }

}
